package com.ipcoder.TCP通信第八题;

import java.io.*;
import java.net.Socket;

/*案例需求
客户端：数据来自于文本文件，接收服务器反馈
服务器：接收到的数据写入文本文件，给出反馈，代码用线程进行封装，为每一个客户端开启一个线程
案例分析
创建客户端对象，创建输入流对象指向文件，每读入一行数据就给服务器输出一行数据，输出结束后使
用shutdownOutput()方法告知服务端传输结束
创建多线程类，在run()方法中读取客户端发送的数据，为了防止文件重名，使用计数器给文件名编号，
接受结束后使用输出流给客户端发送反馈信息。
创建服务端对象，每监听到一个客户端则开启一个新的线程接受数据。
客户端接受服务端的回馈信息*/
public class Clients {
    //客户端
    public static void main(String[] args) throws IOException {
        //1.创建socket套接字
        Socket sk=new Socket("192.168.18.24",9999);
        //socket套接字生成输出流
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
        //创建输入流,输入的是文本文件的内容
        //创建字字符串
        BufferedReader br=new BufferedReader(new FileReader("D:\\黑马视频\\file\\client\\client.txt"));
        String line;
        System.out.println("开始发送文本文件:");
        while ((line=br.readLine())!=null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
        System.out.println("发送文件完成!");
        sk.shutdownOutput();
        //创建客户端接收服务端的反馈输入流
        BufferedReader brs=new BufferedReader(new InputStreamReader(sk.getInputStream()));
        //等待读取数据
        String data=brs.readLine();
        System.out.println("服务端发来的数据是: "+data);
        bw.close();
        sk.close();
        br.close();
        brs.close();
    }
}
